# -*- coding: utf-8 -*-
'''
@authors Ricardo Ramos 6316 && Carlos Pereira 11112
@date 18 de Outubro de 2014
@obs: Criação de uma base de dados para inserção 
de dados consultados no ficheiro excell.
'''
import xlrd
import sqlite3

from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import Column, Integer, String, create_engine
from sqlalchemy.orm import scoped_session, sessionmaker

base = declarative_base()
db_session = scoped_session(sessionmaker())

class Dadostabela(base):
    '''
    Código baseado no tutorial de sqlalchemy
    '''
    __tablename__ = "dados"
    id = Column(Integer, primary_key=True)
    Ano = Column(Integer)
    IPCGlobal = Column(String(10))
    TaxaInflacao = Column(String(10))
    RemuneracaoMin = Column(String(10))
    RemuneracaoMax = Column(String(10))
    PIB = Column(String(10))
    RendimentoNacionalBruto = Column(String(10))
    RendimentoDisponivelBruto = Column(String(10))
    Remuneracoes = Column(String(10))
    

def init_sqlalchemy(xls_name):
        '''
        Método que cria uma base de dados,
        '''
        excel = xlrd.open_workbook(xls_name)
        global basedados
        directoria = 'sqlite:///database.db'
        basedados = create_engine(directoria, echo=True)
        db_session.configure(bind=basedados, autoflush=False, expier_on_commit=False)
        base.metadata.drop_all(basedados)
        base.metadata.create_all(basedados)

        folha_excel = excel.sheet_by_name("Dados")
        ano_col = 1
        ipc_global_col= 2 
        taxa_inflacao_col = 3
        remuneracao_min_col = 4
        remuneracao_max_col = 5
        pib_col = 6
        rend_nac_brut_col = 7
        rend_disp_brut_col = 8
        remuneracoes_col = 9
        basedados.execute(
                Dadostabela.__table__.insert(),
                [{"Ano": folha_excel.cell(line, ano_col).value,
                "IPCGlobal": folha_excel.cell(line, ipc_global_col).value,
                "TaxaInflacao": folha_excel.cell(line, taxa_inflacao_col).value,
                "RemuneracaoMin": folha_excel.cell(line, remuneracao_min_col).value,
                "RemuneracaoMax": folha_excel.cell(line, remuneracao_max_col).value,
                "PIB": folha_excel.cell(line, pib_col).value,
                "RendimentoNacionalBruto": folha_excel.cell(line, rend_nac_brut_col).value,
                "RendimentoDisponivelBruto": folha_excel.cell(line, rend_disp_brut_col).value,
                "Remuneracoes": folha_excel.cell(line, remuneracoes_col).value} for line in range(1, folha_excel.nrows)]
                )